package com.softeem.spider;

import java.io.*;
import java.util.List;

/**
 * 下载器
 */
public class Downloader {

    /**
     * 将资源下载到指定的目录中
     * @param url  服务端资源地址（例如：https://game.gtimg.cn/images/yxzj/img201606/heroimg/106/106.jpg）
     * @param dir  设置存储文件目录  (例如：d:/王者荣耀图片库)
     */
    public static void download(String url, String dir) throws IOException {
        //获取目标资源的输入流
        InputStream is = HttpUtils.readAsStream(url);
        //获取文件名
        int i = url.lastIndexOf("/");
        String fname = url.substring(i + 1);
        //获取本地文件输出流
        OutputStream os = new FileOutputStream(new File(dir,fname));
        //声明字节缓冲区
        byte[] b = new byte[1024]; // 1kb=1024字节     1024KB=1MB  1024MB=1GB
        //标记每次实际读取的字节数
        int len = 0;
        while((len = is.read(b)) != -1){
            //将读取的实际字节数通过文件输出流写出目标文件
            os.write(b,0,len);
        }
        os.close();
        is.close();
    }

    public static void downloadList(List<String> urls, String dir){
        urls.forEach(url->{
            //创建并启动线程下载文件   Tomcat(IO+线程+网络)
            new Thread(()->{
                try {
                    System.out.println("开始下载："+url);
                    download(url,dir);
                    System.out.println("下载完成："+url);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }).start();
        });
    }
}

